package com.demo.config.express.logistics;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;

/**
 * 物流查询Util
 */

@Configuration
public class LogisticsUtil {

	@Value("${wuliu.host}")
	private String host;

	@Value("${wuliu.path}")
	private String path;

	@Value("${wuliu.appcode}")
	private String appcode;

	public String queryWuLiu(String no) {
		String urlSend = this.host + this.path + "?no=" + no + "&type=" + ""; // 【5】拼接请求链接
		try {
			URL url = new URL(urlSend);
			HttpURLConnection httpURLCon = (HttpURLConnection) url.openConnection();
			httpURLCon.setRequestProperty("Authorization", "APPCODE " + this.appcode);// 格式Authorization:APPCODE
																						// (中间是英文空格)
			int httpCode = httpURLCon.getResponseCode();
			if (httpCode == 200) {
				String json = read(httpURLCon.getInputStream());
				// System.out.println("正常请求计费(其他均不计费)");
				// System.out.println("获取返回的json:");
				// System.out.print(json);
				return json;
			}
			else {
				Map<String, List<String>> map = httpURLCon.getHeaderFields();
				String error = map.get("X-Ca-Error-Message").get(0);
				if (httpCode == 400 && error.equals("Invalid AppCode `not exists`")) {
					System.out.println("AppCode错误 ");
				}
				else if (httpCode == 400 && error.equals("Invalid Url")) {
					System.out.println("请求的 Method、Path 或者环境错误");
				}
				else if (httpCode == 400 && error.equals("Invalid Param Location")) {
					System.out.println("参数错误");
				}
				else if (httpCode == 403 && error.equals("Unauthorized")) {
					System.out.println("服务未被授权（或URL和Path不正确）");
				}
				else if (httpCode == 403 && error.equals("Quota Exhausted")) {
					System.out.println("套餐包次数用完 ");
				}
				else if (httpCode == 403 && error.equals("Api Market Subscription quota exhausted")) {
					System.out.println("套餐包次数用完，请续购套餐");
				}
				else {
					System.out.println("参数名错误 或 其他错误");
					System.out.println(error);
				}
				return error;
			}

		}
		catch (MalformedURLException e) {
			return "URL格式错误";
		}
		catch (UnknownHostException e) {
			return "URL地址错误";
		}
		catch (Exception e) {
			// 打开注释查看详细报错异常信息
			e.printStackTrace();
		}
		return null;
	}

	/*
	 * 读取返回结果
	 */
	private static String read(InputStream is) throws IOException {
		StringBuffer sb = new StringBuffer();
		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		String line = null;
		while ((line = br.readLine()) != null) {
			line = new String(line.getBytes(), "utf-8");
			sb.append(line);
		}
		br.close();
		return sb.toString();
	}

}
